/*Copyright ©2016 TommyLemon(https://github.com/TommyLemon/APIJSON)

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.*/

package com.yearner.reviewplan.apijson;

import apijson.framework.APIJSONSQLExecutor;
import apijson.orm.SQLConfig;
import com.yearner.reviewplan.common.util.MyJdbcUtil;

import java.sql.Connection;


/**executor for query(read) or update(write) MySQL database
 * @author Lemon
 */
public class DemoSQLExecutor extends APIJSONSQLExecutor {
	public static final String TAG = "DemoSQLExecutor";
	@Override
	public Connection getConnection(SQLConfig config) throws Exception {
		Connection c = connectionMap.get(config.getDatabase());
		if (c == null || c.isClosed()) {
			c = MyJdbcUtil.getConnection();
			connectionMap.put(config.getDatabase(), c);  // DruidConfig 初始化获取到 Datasource 后给静态变量 DATA_SOURCE 赋值，或者也可以试试 ApplicationContext.getBean(DruidConfig.class).getDataSource()
		}
		return super.getConnection(config);
//		return MyJdbcUtil.getConnection();
	}

//  可重写以下方法，支持 Redis 等单机全局缓存或分布式缓存
//		@Override
//		public List<JSONObject> getCache(String sql, int type) {
//			RedisUtil redisUtil = RedisUtil.getsRedisUtil();
//			List parseObject = redisUtil.getParseObject(sql, List.class);
//			if (parseObject != null) {
//				List<JSONObject> list = new ArrayList<>();
//				for (Object o : parseObject) {
//					String s = JSON.toJSONString(o);
//					list.add(JSON.parseObject(s,JSONObject.class));
//				}
//				return list;
//			}
//			return null;
//		}
//		@Override
//		public synchronized void putCache(String sql, List<JSONObject> list, int type) {
//			if (sql == null || list == null) { //空map有效，说明查询过sql了  || list.isEmpty()) {
//				Log.i(TAG, "saveList  sql == null || list == null >> return;");
//				return;
//			}
//			RedisUtil redisUtil = RedisUtil.getsRedisUtil();
//			redisUtil.pushNormalExpire(sql, JSON.toJSONString(list),10);
////			super.putCache(sql, list, type);
//		}
//		@Override
//		public synchronized void removeCache(String sql, int type) {
//			RedisUtil redisUtil = RedisUtil.getsRedisUtil();
//			redisUtil.delete(sql);
//			super.removeCache(sql, type);
//		}

}
